<template>
  <div class="taobao-container">
    <el-row :gutter="20">
      <el-col :span="4" v-for="(item, index) in goodsList" :key="index">
        <el-card class="goods-card">
          <template #header>
            <div class="card-header" :style="{ backgroundImage: `url(${item.imageUrl})` }"></div>
          </template>
          <!--使用v-if保证tag存在那么就显示，不存在就不显示-->
          <p class="tag" v-if="item.tag">{{ item.tag }}</p>
          <p class="description">{{ item.description }}</p>
          <div class="sales-info" v-if="item.salesCount">
            <span>销量: {{ item.salesCount }}</span>
          </div>
          <template #footer>
            <div class="footer-price">
              <span class="price-symbol">￥</span>
              <span class="price-number">{{ item.price }}</span>
              <div class="shop-info" v-if="item.shopName">
                <span class="shop-name">{{ item.shopName }}</span>
              </div>
            </div>
          </template>
        </el-card>
      </el-col>
    </el-row>
  </div>
</template>

<script setup>
import { onBeforeMount, reactive } from 'vue'
import request from '@/utils/request'

// 只有被ref()方法或 reactive()方法引用的数据才会变成一个响应式数据，
// 响应式数据即是数据发生变化时，视图会实时变化的数据
const goodsList = reactive([])

// 使用axios获取商品数据
function getGoodsList() {
  /*axios
    // API就是指后端提供的接口，即现有的已经实现好的功能，
    // 前端可以通过调用这些接口来获取数据或执行操作
    .get('/goods')
    // 成功获取数据后，将数据赋值给goodsList；注意axios会默认将json数据解析为js对象，
    // 所以可以直接使用res.data获取到js对象数组，
    // 然后使用数组的push方法将数据添加到goodsList中
    .then((res) => {
      let response = res.data
      if (response.code === 200) {
        goodsList.push(...response.data)
      } else {
        ElMessage.error(response.message)
      }
    })
    // 失败时，打印错误信息
    .catch((err) => {
      console.log(err)
    })*/
  request
    .get('/goods')
    .then((res) => {
      goodsList.push(...res.data)
    })
    .catch((err) => {
      console.log(err)
    })
}

// 在页面挂载之前调用获取商品数据的方法
onBeforeMount(() => {
  getGoodsList()
})
</script>

<style scoped>
.taobao-container {
  padding: 20px;
  background-color: #f5f5f5;
  min-height: 100vh;
}

.goods-card {
  max-width: 240px;
  margin-top: 20px;
  border-radius: 8px;
  overflow: hidden;
  transition: all 0.3s ease;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  border: none;
}

.goods-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);
}

.card-header {
  height: 200px;
  background-size: cover;
  background-position: center;
  border-radius: 8px 8px 0 0;
}

.tag {
  color: #ff6182;
  font-size: 12px;
  font-weight: bold;
  background-color: #fff0f0;
  padding: 2px 6px;
  border-radius: 3px;
  display: inline-block;
  margin: 8px 0;
}

.description {
  font-size: 14px;
  color: #333;
  margin: 8px 0;
  min-height: 40px;
  line-height: 1.4;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.sales-info {
  font-size: 12px;
  color: #999;
  margin: 5px 0;
}

.footer-price {
  flex-direction: column;
  align-items: flex-start;
}

.price-symbol {
  color: #ff5305;
  font-size: 14px;
  font-weight: bold;
}

.price-number {
  color: #ff5305;
  font-size: 20px;
  font-weight: bold;
}

.shop-info {
  margin-top: 8px;
}

.shop-name {
  font-size: 12px;
  color: #999;
}

:deep(.el-card__header) {
  padding: 0;
  border-bottom: none;
}

:deep(.el-card__body) {
  padding: 12px;
}

:deep(.el-card__footer) {
  padding: 12px;
  background-color: #fafafa;
}
</style>
